###
### 斋藤康毅的书《深度学习进阶：自然语言处理》
### 公共函数库
###

import numpy as np

'''
创建上下文和目标的函数

参数：
corpus：语料库，一个列表，每个元素是一个句子，句子由单词组成, 单词id列表
window_size：窗口大小，默认为1，即每个单词只与前一个单词和后一个单词相关，上下文的窗口大小
'''
def create_contexts_target(corpus, window_size=1):
    target = corpus[window_size:-window_size]
    contexts = []

    for idx in range(window_size, len(corpus)-window_size):
        cs = []
        for t in range(-window_size, window_size+1):
            if t == 0:
                continue
            cs.append(corpus[idx+t])
        contexts.append(cs)

    return np.array(contexts), np.array(target)

'''
将词语id列表转换为one-hot向量

参数：
corpus：词语id列表
vocab_size：词典大小
'''
def convert_one_hot(corpus, vocab_size):
    one_hot = np.zeros((len(corpus), vocab_size))
    for i, word_id in enumerate(corpus):
        one_hot[i][word_id] = 1
    return one_hot


